package util

import (
	"net"
	"strings"
)

// GetValidLocalIP 获取有效的本地IP地址（排除APIPA地址和禁用的适配器）
func GetValidLocalIP() string {
	// 获取所有网络接口
	interfaces, err := net.Interfaces()
	if err != nil {
		return ""
	}

	for _, iface := range interfaces {
		// 跳过禁用的接口
		if iface.Flags&net.FlagUp == 0 {
			continue
		}
		// 跳过回环接口
		if iface.Flags&net.FlagLoopback != 0 {
			continue
		}

		// 获取接口的IP地址
		addrs, err := iface.Addrs()
		if err != nil {
			continue
		}

		for _, addr := range addrs {
			ipNet, ok := addr.(*net.IPNet)
			if !ok {
				continue
			}
			// 只考虑IPv4地址
			if ipNet.IP.To4() == nil {
				continue
			}
			// 排除APIPA地址（169.254.0.0/16）
			if strings.HasPrefix(ipNet.IP.String(), "169.254.") {
				continue
			}
			// 返回找到的第一个有效IP
			return ipNet.IP.String()
		}
	}

	// 如果没有找到有效IP，返回默认地址
	return "127.0.0.1"
}
